package com.ncmmall.domain.business.order.lading;

import com.fasterxml.jackson.annotation.JsonBackReference;
import com.ncmmall.domain.business.order.Order;
import com.ncmmall.domain.security.user.WebUser;
import com.google.common.collect.Lists;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.sql.Timestamp;
import java.util.List;

/**
 * @author linxs
 * @Description: 云仓提货单
 * @Date: 2019-07-15 17:32
 */
@Entity
@Table(name = "mall_bill_lading")
@Access(AccessType.FIELD)
@Getter
@Setter
public class BillOfLading {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    /**
     * 所属商家
     */
    @JsonBackReference
    @OneToOne
    private WebUser merchant;

    /**
     * 所属供应商
     */
    @JsonBackReference
    @OneToOne
    private WebUser supplier;

    /**
     * 订单编号
     */
    private String orderNo;

    /**
     * 下单时间
     */
    private Timestamp createTime;

    /**
     * 订单总价(运费)
     */
    private double price;

    /**
     * 配送方式
     * 1、快递
     * 2、自提
     */
    private int shippingMethod;

    /**
     * 商品数量
     */
    private int goodsQuantity;

    /**
     * 订单状态
     * 1、提交订单（待付款）
     * 2、付款成功（待发货）
     * 3、商品出库（待收货）
     * 4、订单签收（交易完成）
     */
    private int status;

    /**
     * 支付状态
     * 1、支付成功
     */
    private int payStatus;

    /**
     * 完成支付时间
     */
    private Timestamp payTime;

    /**
     * 确认收货时间
     */
    private Timestamp receiptTime;

    /**
     * 支付方式
     * 1、微信支付
     */
    private int payMethod;

    /**
     * 支付流水号
     */
    private String payNo;

    /**
     * 收货人
     */
    private String deliveryName;

    /**
     * 收货省份
     */
    private String deliveryProvince;

    /**
     * 收货城市
     */
    private String deliveryCity;

    /**
     * 收货区/县
     */
    private String deliveryArea;

    /**
     * 收货地址
     */
    private String deliveryAddress;

    /**
     * 收货人电话
     */
    private String deliveryMobile;

    /**
     * 物流公司
     */
    private String expressCompany;

    /**
     * 物流公司编号
     */
    private String expressCode;

    /**
     * 快递单号
     */
    private String expressesNo;

    /**
     * 备注
     */
    private String note;

    /**
     * 订单详情集合
     */
    @OneToMany(fetch = FetchType.EAGER)
    @JoinColumn(name = "lading_id", nullable = true)
    private List<BillOfLadingDetail> details = Lists.newArrayList();

    /**
     * 成交时间
     */
    private Timestamp finishTime;

    /**
     * 发货时间
     */
    private Timestamp deliveryTime;

    /**
     * 关联的商家普通订单（商家订单从云仓提货）
     */
    @OneToOne
    private Order order;

    @Transient
    private String data;

}
